Many modern computing systems include virtual entities, such as virtual machines (VMs), to improve the utilization of computing resources. Such VMs can be characterized as software-based computing “machines” implemented in a virtualization environment that emulates the underlying hardware resources (e.g., CPU, memory, etc.). For example, multiple VMs can operate on one physical machine (e.g., host computer) running a single host operating system, while the VMs might run multiple applications on various respective guest operating systems.
Another virtual entity in modern computing systems is the container, which is implemented using operating system virtualization or container virtualization. The containers implemented in container virtualization environments comprise groups of processes and/or resources (e.g., memory, CPU, disk, etc.) that are isolated from the host computer and other containers. Such containers directly interface with the kernel of the host operating system with, in most cases, no hypervisor layer. As an example, certain applications can be implemented as containerized applications (CAs). The use of VMs, CAs and other virtualized entities in distributed computing systems to improve the utilization of computing resources continues to increase.
The high storage I/O (input/output or IO) demand of VMs and CAs has in turn brought to bear an increase in deployment of distributed storage systems. Distributed storage systems can aggregate various physical storage facilities to create a logical storage pool where data may be efficiently distributed according to various metrics and/or objectives. Modern hyperconverged (e.g., combining networked compute nodes and storage nodes) systems often host autonomous nodes that facilitate incremental and/or linear scaling. Some clusters in a distributed system might scale to hundreds of nodes or more that support several thousands or more autonomous VMs. As such, the topology and/or the storage I/O activity of the distributed system can be highly dynamic. Users (e.g., system administrators) of such large scale, highly dynamic distributed systems desire applications (e.g., management tools) that facilitate managing and/or analyzing the distributed systems that are resilient and/or responsive to changes in the system topology.
Often new functionality pertaining to management and/or analysis of the cluster is desired by the user. For example, a given system administrator for an enterprise might determine that a certain set of metrics are correlated to the performance of the enterprise's distributed compute and storage system implementation, and desires an extension to the system management application that measures and analyzes those identified metrics. In some distributed virtualization environments, applications can be implemented as CAs. Some containerized applications can be configured to implement a particular function or set of functions without reliance on a fully-configured hardware and/or software platform. For example, a containerized application might be defined to perform some simple operation over some given inputs and then produce an output in a predefined format. In such a case, the containerized application can be considered to be lightweight, at least as pertains to not having the “weight”, for example, of a hypervisor and/or a guest operating system (e.g., as implemented with VMs).
Containerized applications can provide a certain level of secure isolation from other components in the distributed virtualization system. The foregoing characteristics of these containerized applications can be desirable to users of distributed virtualization systems. For example, one or more resource owners (e.g., data provider, service provider, enterprise, etc.) each implementing a respective large, multi-user (e.g., multi-tenant) cluster in a distributed virtualization system may desire to implement applications using containerized applications to provide efficient distribution across the cluster as well as to provide isolation from user (e.g., other tenant) VMs and/or system control components. In some cases, the resource owners further desire access not only to internally developed applications, but also to publicly available applications from, for example, a third-party developer marketplace.
Unfortunately, legacy techniques for deploying applications from third-party developer marketplaces fail to address deployments into distributed virtualization environments. More specifically, legacy techniques merely support installation of a given application based on certain a priori knowledge of the installation environment. For example, a particular application can be developed for a given operating system and/or platform so as to be able to perform certain predetermined functions (e.g., perform file access based on file extension).
What is needed is a technique or techniques to improve over legacy approaches and/or over other considered approaches. Some of the approaches described in this background section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.